Hibernate এ First-Level Cache (Session Cache) হল একটি session scope এর মধ্যে কাজ করা ক্যাশিং মেকানিজম। এটি Hibernate-এর default cache এবং এটি Hibernate session-এর জন্য স্বয়ংক্রিয়ভাবে ব্যবহৃত হয়। First-level cache Hibernate সেশনের সাথে সম্পর্কিত এবং এটি session object এর মধ্যে ডেটা স্টোর করে রাখে। এটি ডেটাবেস থেকে ডেটা পুনরায় লোড না করে, ক্যাশে থেকে ডেটা সরবরাহ করে, ফলে অ্যাপ্লিকেশনের পারফরম্যান্স বৃদ্ধি পায়।
এখানে আমরা একটি উদাহরণ দেখব যেখানে first-level cache ব্যবহৃত হচ্ছে। উদাহরণে, আমরা Employee entity এর একটি instance তৈরি করব এবং প্রথমবার ডেটাবেস থেকে রিট্রিভ করার পর ক্যাশে কীভাবে তা সংরক্ষিত হচ্ছে তা দেখব।
import javax.persistence.*;
@Entity
@Table(name="employee")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="name")
private String name;
@Column(name="salary")
private double salary;
// Constructors, Getters and Setters
public Employee() {}
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
// Getters and Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
import org.hibernate.*;
import org.hibernate.cfg.Configuration;
public class FirstLevelCacheExample {
public static void main(String[] args) {
// SessionFactory তৈরি করা
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
// Session তৈরি করা
Session session = factory.getCurrentSession();
try {
// 1st Query - Employee object get করা (First-level cache এর মধ্যে সংরক্ষিত)
session.beginTransaction();
Employee employee1 = session.get(Employee.class, 1); // First query, will hit DB
System.out.println("Employee Retrieved: " + employee1.getName());
// 2nd Query - একই Employee object আবার get করা (First-level cache থেকে ফিরে আসবে)
Employee employee2 = session.get(Employee.class, 1); // Second query, will use the cache
System.out.println("Employee Retrieved Again: " + employee2.getName());
// Check if both references are pointing to the same object in memory
System.out.println("Are both references the same? " + (employee1 == employee2));
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
Employee Retrieved: John Doe
Employee Retrieved Again: John Doe
Are both references the same? true
এখানে:
employee1
রিট্রিভ করা হলে, Hibernate ডেটাবেস থেকে ডেটা আনে।employee2
রিট্রিভ করা হলে, Hibernate ডেটাবেসে কুয়েরি না করে first-level cache থেকে ডেটা ফেরত দেয়।employee1 == employee2
সত্য হয়।ফিচার | বিবরণ |
---|---|
Performance Improvement | First-level cache ডেটাবেসের প্রতি কুয়েরি সংখ্যা কমিয়ে পারফরম্যান্স উন্নত করে। |
Avoid Duplicate Queries | একবার ডেটা লোড হলে, এটি প্রথম সেশনে পুনরায় লোড করা হয় না। |
Automatic and Transparent | First-level cache স্বয়ংক্রিয়ভাবে কার্যকর হয় এবং ডেভেলপারদের কাছে কিছু কনফিগারেশন প্রয়োজন হয় না। |
Session-Specific Cache | এটি সেশনের মধ্যে একটি ডেটা পয়েন্টের জন্য নিশ্চিত করে যে ডুপ্লিকেট কুয়েরি না হয়। |
Hibernate এর First-Level Cache (Session Cache) হল একটি শক্তিশালী এবং প্রয়োজনীয় ফিচার যা session scope এর মধ্যে অবজেক্টগুলিকে ক্যাশে রাখে এবং পুনরায় ডেটাবেস কুয়েরি না করে ডেটা সরবরাহ করে। এটি performance বৃদ্ধি করতে সাহায্য করে এবং duplicate queries কমায়। তবে, cross-session ক্যাশিংয়ের জন্য Hibernate-এর Second-Level Cache ব্যবহার করা উচিত।
Read more